/*!
 * This file is PART of libhp project
 * @author hongjun.liao <docici@126.com>, @date 2023/7/31
 *
 * stdlib on Win32
 * */
/////////////////////////////////////////////////////////////////////////////////////////

#ifndef LIBHP_STDLIB_H
#define LIBHP_STDLIB_H

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* HAVE_CONFIG_H */

#ifdef __cplusplus
extern "C" {
#endif

/////////////////////////////////////////////////////////////////////////////////////
#ifdef _MSC_VER
int random();
#endif /* _MSC_VER */

/////////////////////////////////////////////////////////////////////////////////////
#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif

/////////////////////////////////////////////////////////////////////////////////////
//TODO: rename to hp_free_fn_t
typedef	void  (* hp_free_t)(void * ptr);
typedef int (* hp_cmp_fn_t)(const void *key, const void *ptr);

/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
/* Unused arguments generate annoying warnings... */
#define HP_UNUSED(V) ((void) V)

#define hp_new(T) ((T *)calloc(1, sizeof(T)))
#define hp_del(p) (free(p))
/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

#ifndef NDEBUG
int test_hp_stdlib_main(int argc, char ** argv);
#endif /* NDEBUG */

#ifdef __cplusplus
}
#endif

#endif /* LIBHP_STDLIB_H */
